let n = parseInt(readline()) // 读出这个n
let line = readline().split(' ').map((item) => parseInt(item)) // 转换成数字数组
let arr = []
for (let i = 0; i < n - 1; i++) {
  arr.push(Math.abs(line[i + 1] - line[i]))
} // 收集平滑值
let map = {}
let max = 0
let secondMax = 0
for (let i = 0; i < arr.length; i++) {
  if (arr[i] > max) {
    max = arr[i]
  }
  map[arr[i]] = (map[arr[i]] || 0) + 1 // 统计平滑值的个数
}
for (let j = 0; j < arr.length; j++) {
  if (arr[j] < max && arr[j] > secondMax) {
    secondMax = arr[j]
  }
}
if (map[max] >= 3) { // 如果最大的数字超过3个 那就直接输出最大的
  console.log(max)
} else if (map[max] === 2) { // 如果最大的数字是2个 判断这两个是不是挨着如果是挨着 那就输出第二大的
  let newFlag = 0
  for (let i = 0; i < arr.length - 1; i++) {
    if (arr[i] === max && arr[i] === arr[i + 1]) {// 如果第一个等于这个最大 他后面的也是最大 那就输出第二大的

      newFlag = 1
      console.log(secondMax)
      break
    }
  }
  if (newFlag === 0) {
    console.log(max)
  }
} else { // 如果只有一个最大值
  console.log(secondMax)
}